function NW03_yc(fq) {//传入父亲对象（本对象的上一级）
    this.fq = fq;
    this.wgj = fq.wgj;

    // this.hc = [];//缓存对象。用于： NW03_yc_wj


    //报文_格式
    this.bw_gs = {
        json: 'application/json; charset=utf-8',
        j: this.json,
        text: 'application/x-www-form-urlencoded',
        wb: this.text,
        w: this.text
    }
}
NW03_yc.prototype.post = this.by
NW03_yc.prototype.get = this.n
/**
 * 
 * 搬运（by）数据
 * ajax请求，post方式
 * @参数 {对象} dizhi 请求路径 
 * @参数 {对象} Canshu 参数
 * @参数 {对象} ff 请求成功后，回调函数
 * @参数 {对象} shujuLX 数据类型
 * @参数 {boolean} yibu true=异步（默认） ，false=同步
 */
NW03_yc.prototype.by = function (dizhi, canshu, ff, shujuLX, yibu) {
    canshu = this._ngj_bw_canshu(canshu);
    this._ngj_ajax('post', dizhi, canshu, ff, shujuLX, yibu);
}

// NW03_yc.prototype.hqWJ = function (jd) {
//     for (let i = 0; i < this.hc.length; i++) {
//         if (this.hc[i].jd == jd) {
//             return this.hc[i];
//         }
//     }
//     return null;
// }

NW03_yc.prototype.cjWJ = function (jd, zsxx, dizih) {
    // let wj = new NW03_yc_wj(jd, zsxx, dizih);
    if (typeof jd == 'string') {
        jd = document.getElementById(jd);
    }
    if (typeof zsxx == 'string') {
        zsxx = document.getElementById(zsxx);
    }
    return new NW03_yc_wj(jd, zsxx, dizih);
}


NW03_yc.prototype.by_j = function (dizhi, canshu, ff, yibu) {
    this.by(dizhi, canshu, ff, 'json', yibu);
}
NW03_yc.prototype.hq_j = function (fs, dizhi, canshu, ff, yibu) {
    this.hq(fs, dizhi, canshu, ff, 'json', yibu)
}
NW03_yc.prototype.n_j = function (dizhi, canshu, ff, yibu) {
    this.n(dizhi, canshu, ff, 'json', yibu)
}

NW03_yc.prototype.hq = function (fs, dizhi, canshu, ff, shujuLX, yibu) {
    if (null == fs) {
        fs = 'post';
    } else if (this.wgj.pdWenben(fs)) {
        fs = this.wgj.scKong(fs).toLowerCase();

    }

    switch (fs) {
        default:
        case 'post':
        case 'by':
        case '1':
        case 1:
            this.by(dizhi, canshu, ff, shujuLX, yibu)
            return;
        case 'get':
        case 'n':
        case '0':
        case 0:
            this.n(dizhi, canshu, ff, shujuLX, yibu)
            return;
    }
}


/**
 * 拿（n)数据。
 * ajax请求，get方式
 * @参数 {对象} dizhi 请求路径 
 * @参数 {对象} canshu 参数
 * @参数 {对象} ff 请求成功后，回调函数
 * @参数 {对象} shujuLX 数据类型
 * @参数 {boolean} yibu true=异步（默认），false=同步 
 */
NW03_yc.prototype.n = function (dizhi, canshu, ff, shujuLX, yibu) {
    //参数管理
    canshu = this._ngj_bw_canshu(canshu); //将参数，调整成 【报文】要求的【样子】
    if (canshu) {
        dizhi = dizhi + '?' + canshu; //如果有参数，附加到url上。因为是get方式请求。
    }
    this._ngj_ajax('get', dizhi, null, ff, shujuLX, yibu);
}



//--------------------------工具管理--------------------------
//反馈
NW03_yc.prototype._zx_fk = function (ff, jg) {
    if (ff) {
        if (typeof ff == 'function') {//如果传入的是函数
            ff(jg);
            return;
        }
        if (ff['_03yc_qq_cg']) {
            ff._03yc_qq_cg(jg);
        }
    }
}
// js ajax技术
NW03_yc.prototype._ngj_ajax = function (lx, dizhi, canshu, ff, shujuLX, yibu) {
    shujuLX = this._ngj_bw_gs(shujuLX); //将参数，调整成 【报文】要求的【样子】
    //1、取得ajax对象
    let xmlhttp = this.wgj.hqXMLHttpRequest();
    //2、添加监听——ajax技术。浏览会不断检测反馈结果，并动态调用（当条件满足后）相关的方法
    let _wgj = this.wgj;
    let wo = this;
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            if (ff) {
                switch (shujuLX) {
                    case 'j':
                    case 'json':
                        wo._zx_fk(ff, _wgj.gshWB_mbJson(xmlhttp.responseText))
                        break;
                    case 'text':
                    case 'wb':
                    case 'w':
                        // ff(xmlhttp.responseText);
                        wo._zx_fk(ff, xmlhttp.responseText)
                        break;
                    default:
                        // ff(xmlhttp.responseText);
                        wo._zx_fk(ff, xmlhttp.responseText)
                        break;
                }
            }
        }
    }
    //3、创建【大路】通向服务器 lx=post|get ；dizhi=服务器地址；yibu=true|false
    xmlhttp.open(lx, dizhi, yibu == undefined ? true : yibu);
    //4、准备报文（报告 服务器 的文章） 头（标题）。
    this._ngj_bw_tou(xmlhttp, shujuLX);
    //5、提交报文（标题+内容）
    xmlhttp.send(canshu);//post

    // if (canshu) {
    //     xmlhttp.send(canshu);//post
    // } else {
    //     xmlhttp.send(); //get
    // }
}

/**
 * 辅助:设置请求头-内容格式(配置pz 访问FW 头tou)
 * @参数 {对象} xmlhttp ajax对象
 * @参数 {对象} shujuLX 数据类型
 */
NW03_yc.prototype._ngj_bw_tou = function (xmlhttp, shujuLX) {
    for (let key in this.bw_gs) {
        if (shujuLX == key) {
            xmlhttp.setRequestHeader('Content-Type', this.bw_gs[key]);
            return;
        }
    }
    xmlhttp.setRequestHeader('Content-Type', this.bw_gs['json']);
}


/**
 * 工具:格式化数据类型(格式化gsh 返回值FHZ 的类型 LX)
 * 默认是json类型
 * 统一小写，去除多余的空格。
 * 
 * @参数 {对象} rDataType 数据类型
 */
NW03_yc.prototype._ngj_bw_gs = function (shujuLX) {
    return shujuLX ? this.wgj.scKong(shujuLX).toLowerCase() : 'json'; //去除空格，并全部小写。
}

/**
 * 将参数，调整成 【报文】要求的【样子】
 * 格式化地址（DiZhi)参数(canshu),使其变成"参数1=1&参数2=xx............"的格式。
 * @参数 {String|Object} dizhiShuju 路径参数
 */
NW03_yc.prototype._ngj_bw_canshu = function (dizhiShuju) {
    if (null == dizhiShuju || undefined == dizhiShuju) {
        return '';
    }
    //传入来的是字符串时
    if (this.wgj.pdWenben(dizhiShuju)) {
        return this.wgj.scKong(dizhiShuju);
    }
    return this.wgj.dx_z_wb(dizhiShuju);
}